package sun

import (
	"time"

	http_label_center "gobase/http_work_flow/label_center"
	"gobase/http_work_flow/label_center/ai/voice"

	"github.com/qida/gohp/timex"
)

const (
	StatusRecSunVoice音视频删除失败  = -9
	StatusRecSunVoice音视频已删除   = -8
	StatusRecSunVoice人脸识别失败   = -7
	StatusRecSunVoice语音识别任务失败 = -6
	StatusRecSunVoice分离MP3失败  = -5
	StatusRecSunVoice分离图片失败   = -4
	StatusRecSunVoice视频文件错误   = -3
	StatusRecSunVoice文件下载失败   = -2
	StatusRecSunVoice生成MP4超时  = -1

	StatusRecSunVoice新建文件记录   = 10
	StatusRecSunVoice已获取MP4地址 = 20
	StatusRecSunVoice已下载MP4文件 = 30
	StatusRecSunVoice已分离MP3音频 = 40
	StatusRecSunVoice发起语音识别   = 50
	StatusRecSunVoice语音任务运行中  = 60
	StatusRecSunVoice回调语音识别   = 70
	StatusRecSunVoice查询语音识别   = 80
	StatusRecSunVoice人脸识别完成   = 90
)

type ReqNotifyRecSunVoice struct {
	Request struct {
		Action  string `json:"action"`
		Content struct {
			Device string `json:"DEVICE"`
			State  string `json:"STATE"`
			Dyjd   string `json:"DYJD"`
			Dywd   string `json:"DYWD"`
		} `json:"content"`
	} `json:"request"`
}

type ReqHandleRecSunVoice struct {
	IdRecSunVoice      int64  `json:"IdRecSunVoice"`      //记录ID
	StatusRecSunVoices []int8 `json:"StatusRecSunVoices"` //状态集

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

type ReqUrlRecSunVoice struct {
	IdRecSunVoice      int64  `json:"IdRecSunVoice"`      //记录ID
	StatusRecSunVoices []int8 `json:"StatusRecSunVoices"` //状态集

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

type ReqDownloadRecSunVoice struct {
	IdRecSunVoice      int64  `json:"IdRecSunVoice"`      //记录ID
	StatusRecSunVoices []int8 `json:"StatusRecSunVoices"` //状态集

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

type ReqMp3RecSunVoice struct {
	IdRecSunVoice int64 `json:"IdRecSunVoice"` //记录ID

	StatusRecSunVoices []int8 `json:"StatusRecSunVoices"` //状态集

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

type ReqVoiceRecSunVoice struct {
	IdRecSunVoice int64 `json:"IdRecSunVoice"` //记录ID

	StatusRecSunVoices []int8 `json:"StatusRecSunVoices"` //状态集

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}
type ReqResultRecSunVoice struct {
	IdRecSunVoice int64 `json:"IdRecSunVoice"` //记录ID

	StatusRecSunVoices []int8 `json:"StatusRecSunVoices"` //状态集

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

type ReqFaceRecSunVoice struct {
	IdRecSunVoice      int64  `json:"IdRecSunVoice"`      //记录ID
	StatusRecSunVoices []int8 `json:"StatusRecSunVoices"` //状态集

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

type ReqResetRecSunVoice struct {
	IdRecSunVoice int64 `json:"IdRecSunVoice"` //记录ID

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

type ReqRecognizeRecSunVoice struct {
	PlanNo   string `json:"PlanNo"`   //工单编号
	DeviceId string `json:"DeviceId"` //设备国标Id

	voice.ReqVoiceFile

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

// 请求 搜索查询
type ReqSearchRecSunVoice struct {
	IdSunVoice    int64  `json:"IdSunVoice"`    //任务ID
	IdRecSunVoice int64  `json:"IdRecSunVoice"` //记录ID
	PlanNo        string `json:"PlanNo"`        //工单编号
	DeviceId      string `json:"DeviceId"`      //设备国标Id

	SegmentName string `json:"SegmentName"` //环节名称
	CityOrgName string `json:"CityOrgName"` //
	AreaOrgName string `json:"AreaOrgName"` //

	TimeMonth  time.Time `json:"TimeMonth"`  //月份过滤
	TimeCreate time.Time `json:"TimeCreate"` //

	Status int8 `json:"Status,omitempty"` //标签状态 正常:10 删除:-10

	Page        int64    `json:"Page"`                  //必填 指定返回页码号
	Limit       int64    `json:"Limit"`                 //必填 指定返回每页条数
	FieldOrders []string `json:"FieldOrders,omitempty"` //指定要排序的字段数组，默认升序，降序加前缀-，如 ["-Id", "Name"] 按Id降序Name升序排列

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

// type ReqEventMediaCenter struct {
// 	EventName       string `json:"eventName"`
// 	App             string `json:"app"`
// 	Stream          string `json:"stream"`
// 	RtspURL         string `json:"rtspUrl"`
// 	TimeStart       string `json:"timeStart"`
// 	Mp4FileName     string `json:"mp4_file_name"`
// 	Mp3FileName     string `json:"mp3_file_name"`
// 	Mp4DiskFileName string `json:"mp4_disk_file_name"`
// 	Mp3DiskFileName string `json:"mp3_disk_file_name"`
// }

// 请求 搜索查询
type ReqListRecSunVoice struct {
	AppId string `json:"AppId,omitempty"` //应用Id 默认=rtp

	Status int8 `json:"Status,omitempty"` //标签状态 正常:10 删除:-10

	Page        int64    `json:"Page"`                  //必填 指定返回页码号
	Limit       int64    `json:"Limit"`                 //必填 指定返回每页条数
	FieldOrders []string `json:"FieldOrders,omitempty"` //指定要排序的字段数组，默认升序，降序加前缀-，如 ["-Id", "Name"] 按Id降序Name升序排列

	Log http_label_center.Log `json:"Log,omitempty"` //追踪日志
}

// 响应 单一对象
type RespRecSunVoice struct {
	IdRecSunVoice int64 `json:"IdRecSunVoice"`
	IdSunVoice    int64 `json:"IdSunVoice"`

	PlanNo   string `json:"PlanNo"`   //工单Id
	DeviceId string `json:"DeviceId"` //设备编码(国标Id)

	TaskId string `json:"TaskId"` //识别任务Id 冗余

	FileLinkMp3 string `json:"FileLinkMp3"` //MP3地址
	FileLinkMp4 string `json:"FileLinkMp4"` //MP4地址
	SegmentName string `json:"SegmentName"` //环节名称

	JsonReqVoiceFile    string `json:"JsonReqVoiceFile,omitempty"`    //语音任务
	JsonVoiceTaskHeader string `json:"JsonVoiceTaskHeader,omitempty"` //语音任务Header
	JsonVoicePayload    string `json:"JsonVoicePayload"`              //语音识别结果JSON
	JsonVideoFace       string `json:"JsonVideoFace"`                 //人脸识别结果JSON

	Status     int8   `json:"Status"`
	StatusText string `json:"StatusText"`

	TimeStart timex.TimeNull `json:"TimeStart"` //媒体开始时间
	TimeEnd   timex.TimeNull `json:"TimeEnd"`   //媒体结束时间
	// TimeHookStart timex.TimeNull `json:"TimeHookStart"` //挂载时间
	// TimeHookEnd   timex.TimeNull `json:"TimeHookEnd"`   //挂载时间

	Text string `json:"Text"` //全文本语音识别结果

	TimeCreate time.Time `json:"TimeCreate"` //创建时间
}

// 响应 查询列表
type RespRecSunVoices struct {
	Total        int64             `json:"Total"`        //返回列表的总条数
	RecSunVoices []RespRecSunVoice `json:"RecSunVoices"` //返回列表对象
}

// 响应 单一对象
type RespListRecSunVoice struct {
	PlanNo string `json:"PlanNo"` //工单Id

}

// 响应 查询列表
type RespListRecSunVoices struct {
	Total        int64                 `json:"Total"`        //返回列表的总条数
	RecSunVoices []RespListRecSunVoice `json:"RecSunVoices"` //返回列表对象
}
